#define  _CRT_SECURE_NO_WARNINGS 1
//#include"head.h"

//malloc函数
//void* malloc(size_t size); //size 指定大小，单位字节
/*
这个函数向内存申请一块连续可用的空间，并返回指向这块空间的指针。
如果开辟成功，则返回一个指向开辟好空间的指针。。
如果开辟失败，则返回一个 NULL指针，因此malloc的返回值一定要做检查。
返回值的类型是 void*，所以maloc函数并不知道开辟空间的类型，具体在使用的时候使用者自己来决定。
如果参数 size 为0，malloc的行为是标准是未定义的，取决于编译器。
*/

//void free(void* ptr); // --> 释放的是ptr指向的空间
/*
C语言提供了另外一个函数free，
专门是用来做动态内存的释放和回收的
free函数用来释放动态开辟的内存。
如果参数 ptr 指向的空间不是动态开辟的，那free函数的行为是未定义的。
如果参数 ptr 是NULL指针，则函数什么事都不做。
malloc和free都声明在 stdlib.h 头文件中。
*/

//栈区：局部、形参、临时变量
//堆区：动态申请(malloc、free、calloc、realloc)
//静态区：全局、静态变量


//int main()
//{
//	//向内存申请40字节的空间，存放整形
//	int* pi = (int*)malloc(40);
//	if (pi == NULL)
//	{
//		perror("malloc");
//        return -1; //异常返回 非0
//	}
//	//使用内存
//	int i = 0;
//	for (i = 0; i < 10; i++)
//	{
//        *(pi + i) = i;
//	}
//	for (i = 0; i < 10; i++)
//	{
//        printf("%d ", *(pi + i));
//	}
//	//释放内存
//    free(pi);
//    pi = NULL;
//	//写free函数是主动释放内存空间
//	//如果没有写free函数，当程序运行结束时，操作系统会自动释放这些内存空间
//	//写free函数是为了避免当程序一直运行时发生内存泄漏
//
//	//在free处断点，调试，监视 pi,10
//	//当free执行后，pi指向的空间存放的数据会发生变化，但pi指向的地址没有变化
//	//free之后，pi就变成了野指针，需要置为NULL
//
//
//	return 0; //正常返回 0
//}
